package com.shopping.controller.back;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.shopping.commons.response.DataGradResp;
import com.shopping.commons.response.MessageResp;
import com.shopping.commons.util.CommonCode;
import com.shopping.model.AdminInfo;
import com.shopping.param.AdminInfoParam;
import com.shopping.service.IAdminService;

/**
 * 用户的   Conroller
 * @author Administrator
 *
 */
@Controller
@RequestMapping("back/adminInfo") 
public class AdminController {

	@Autowired
	private IAdminService adminService;
	
	/**
	 * 增加某个用户
	 * @param request
	 * @param param
	 * @return
	 */
	@RequestMapping("insert")
	@ResponseBody  ///这个是吧MessageResp转成  json 的注解   普遍就是   对应  ajax 的请求    
	public MessageResp insert(HttpServletRequest request,AdminInfo param){

		return adminService.insert(param);
	}
	
	/**
	 * 查询 用户
	 * @param request
	 * @param param
	 * @return    两个参数  必须分开  /
	 */
	@RequestMapping("select/{delflag}")//resetful风格的，这样只要拼接一下就可以了，不麻烦些
	@ResponseBody  
	public DataGradResp<AdminInfo> select(HttpServletRequest request,AdminInfoParam param,@PathVariable("delflag")String delflag){
		//这里调用的就是  IUserService里面定义的 select方法了，   是靠  参数来判断的， ICommonService里面用的是User
		param.setDelflag(delflag);
		return adminService.select(param);
	}
	
	/**
	 * 删除用户   
	 * @param request
	 * @param param
	 * @return
	 */
	/*resetful 接口规范  接口编码的风格*/
	@RequestMapping(value="{id}",method=RequestMethod.DELETE)
	@ResponseBody 
	public MessageResp delete(HttpServletRequest request,@PathVariable("id") Integer id){
		return adminService.delete(id);
	}
	 /*
	 * 修改用户
	 * @param request
	 * @param param
	 * @return
	 **/
	@RequestMapping("update")
	@ResponseBody 
	public MessageResp update(HttpServletRequest request,AdminInfo param){
		return adminService.update(param);
	}
	
	/**
	 * 管理员登录
	 * @param request
	 * @param param
	 * @return
	 */
	@RequestMapping("login")
//	@ResponseBody  ///这个是吧MessageResp转成  json 的注解   普遍就是   对应  ajax 的请求    
	public ModelAndView login(ModelAndView mv,HttpServletRequest request,AdminInfoParam param){
		HttpSession session=request.getSession();
		MessageResp resp=new MessageResp();
		resp=adminService.login(param);
		if(CommonCode.SUCCESS.equals(resp.getCode())){
			//session  不像application   session是与浏览器绑定的
			//，因此一个浏览器进行一次访问，只会是一个用户
			// application  服务器中所有的session公用的，  userid，username来确定用户
			session.setAttribute("adminInfo", resp.getObj());
		}
		//TODO:临时改造下， 改成返回jsp页面的形式，
		if("0000".equals(resp.getCode())){
			//登录成功了
			mv=new ModelAndView("views/back/manager/index");//这里是寻址的页面
			mv.addObject("adminInfo", resp.getObj());//这里就是页面要用的el表达式
			return mv;//返回的String就是 在Mvc在注册页面解析的时候配置的 你看等下我这里写了以后返回的是什么页面，
		}else{
			//登录失败了
			mv=new ModelAndView("views/back/login");
			//登录失败的时候，显示到info-content里面去
			mv.addObject("info-content", resp.getMsg());//这里是吧错误信息显示在登录页面上面，所以登录页面上面要预留一个el表达式的位置
			return mv;//modelandView也是基于一次请求的
		}
	}
	
	@RequestMapping("exit")
	@ResponseBody//返回对象一般都是用responseBody
	public MessageResp exit(HttpServletRequest request){
		//调用service里面的exit方法
		return adminService.exit(request);
	}

}
